From 6cc2615b6370cca05820cd11e6b0d53f270e11cb Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 28 Sep 2015 02:19:25 +0200 Subject: [PATCH] widget: Add a resize_needed flag ... and API to set and unset it. It is set when gtk_widget_queue_resize() is called. It is unset when gtk_widget_get_preferred_width/height() is called. So far it is not used. --- gtk/gtksizerequest.c | 2 ++ gtk/gtkwidget.c | 12 ++++++++++++ gtk/gtkwidgetprivate.h | 1 + 3 files changed, 15 insertions(+) diff --git a/gtk/gtksizerequest.c b/gtk/gtksizerequest.c index 393af7c72b..eb46bd681f 100644 --- a/gtk/gtksizerequest.c +++ b/gtk/gtksizerequest.c @@ -149,6 +149,8 @@ gtk_widget_query_size_for_orientation (GtkWidget *widget, gint nat_baseline = -1; gboolean found_in_cache; + gtk_widget_ensure_resize (widget); + if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_CONSTANT_SIZE) for_size = -1; diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 4b34153039..f6c7699b16 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -16161,7 +16161,19 @@ gtk_widget_queue_resize_on_widget (GtkWidget *widget) { GtkWidgetPrivate *priv = widget->priv; + priv->resize_needed = TRUE; priv->alloc_needed = TRUE; +} + +void +gtk_widget_ensure_resize (GtkWidget *widget) +{ + GtkWidgetPrivate *priv = widget->priv; + + if (!priv->resize_needed) + return; + + priv->resize_needed = FALSE; _gtk_size_request_cache_clear (&priv->requests); } diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index aa69230301..2e02308eea 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -167,6 +167,7 @@ void _gtk_widget_set_shadowed (GtkWidget *widget, gboolean shadowed); gboolean _gtk_widget_get_alloc_needed (GtkWidget *widget); void gtk_widget_queue_resize_on_widget (GtkWidget *widget); +void gtk_widget_ensure_resize (GtkWidget *widget); void _gtk_widget_draw (GtkWidget *widget, cairo_t *cr); void _gtk_widget_scale_changed (GtkWidget *widget); -- 2.30.2